<?php

namespace app\models\jasper;

trait JasperApiBillingTrait
{
    /**
     * 返回某个设备在特定计费周期内的流量用量。要查看该设备当前月份的用量，请使用 GetTerminalDetails 并检查 MonthToDateUsage 字段。
     * @param string $iccid
     * @param integer $cycleStartDate
     * @param boolean $cycleStartDateSpecified
     * @return \stdClass
     * @throws \Exception
     */
    public function GetTerminalUsage($iccid, $cycleStartDate, $cycleStartDateSpecified)
    {
        return $this->call(
            preg_replace('/.*JasperApi(.*?)Trait/', '$1', __TRAIT__),
            __FUNCTION__,
            [
                'iccid' => $iccid,
                'cycleStartDate' => date('Y-m-d', $cycleStartDate - date('Z')),
                'cycleStartDateSpecified' => $cycleStartDateSpecified,
            ]
        );
    }
    /**
     * 返回给定账户和计费周期的账单数据。
     * 这些数据包括在计费 > 账单 > 账单明细页面顶部显示的详细信息，
     * 但不包括在页面底部的各个选项卡中显示的信息。例如，您可以获得以下信息：
     *    •  总订购费用
     *    •  超出计划内用量的流量和/或短信的总用量费用
     *    •  所有计费 SIM 卡的总计费用量
     *    •  激活费用(如适用)
     *    •  网络服务费等其他费用
     * 您还可以使用“用量 API”，了解有关每个计费周期的设备用量信息。
     * @param integer $accountId
     * @param integer $cycleStartDate
     * @param boolean $cycleStartDateSpecified
     * @return \stdClass
     * @throws \Exception
     */
    public function GetInvoice($accountId, $cycleStartDate, $cycleStartDateSpecified)
    {
        return $this->call(
            preg_replace('/.*JasperApi(.*?)Trait/', '$1', __TRAIT__),
            __FUNCTION__,
            [
                'accountId' => $accountId,
                'cycleStartDate' => date('c', $cycleStartDate),
                'cycleStartDateSpecified' => $cycleStartDateSpecified,
            ]
        );
    }

    /**
     * 返回给定设备在一个特定计费周期内发生的所有流量会话的相关信息。
     * @param string $iccid
     * @param integer $cycleStartDate
     * @param integer $pageNumber
     * @param boolean $pageNumberSpecified
     * @return \stdClass
     * @throws \Exception
     */
    public function GetTerminalUsageDataDetails($iccid, $cycleStartDate, $pageNumber, $pageNumberSpecified)
    {
        return $this->call(
            preg_replace('/.*JasperApi(.*?)Trait/', '$1', __TRAIT__),
            __FUNCTION__,
            [
                'iccid' => $iccid,
                'cycleStartDate' => date('c', $cycleStartDate),
                'pageNumber' => $pageNumber,
                'pageNumberSpecified' => $pageNumberSpecified,
            ]
        );
    }

    /**
     * 返回一个设备在某个特定计费周期内发出或收到的所有短信的相关信息。
     * @param string $iccid
     * @param integer $cycleStartDate
     * @param integer $pageNumber
     * @param boolean $pageNumberSpecified
     * @return \stdClass
     * @throws \Exception
     */
    public function GetTerminalUsageSmsDetails($iccid, $cycleStartDate, $pageNumber, $pageNumberSpecified)
    {
        return $this->call(
            preg_replace('/.*JasperApi(.*?)Trait/', '$1', __TRAIT__),
            __FUNCTION__,
            [
                'iccid' => $iccid,
                'cycleStartDate' => date('c', $cycleStartDate),
                'pageNumber' => $pageNumber,
                'pageNumberSpecified' => $pageNumberSpecified,
            ]
        );
    }

    /**
     * 返回一个设备在某个特定计费周期内接到或拨打的所有通话呼叫的相关信息。
     * @param string $iccid
     * @param integer $cycleStartDate
     * @param integer $pageNumber
     * @param boolean $pageNumberSpecified
     * @return \stdClass
     * @throws \Exception
     */
    public function GetTerminalUsageVoiceDetails($iccid, $cycleStartDate, $pageNumber, $pageNumberSpecified)
    {
        return $this->call(
            preg_replace('/.*JasperApi(.*?)Trait/', '$1', __TRAIT__),
            __FUNCTION__,
            [
                'iccid' => $iccid,
                'cycleStartDate' => date('c', $cycleStartDate),
                'pageNumber' => $pageNumber,
                'pageNumberSpecified' => $pageNumberSpecified,
            ]
        );
    }
}
